package com.catmiao.spark.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

/**
 * @title: RDD_Operator_01_transform
 * @projectName spark_study
 * @description: TODO
 * @author ChengMiao
 * @date 2024/2/2 11:48
 */
object RDD_Operator_02_transform {

  def main(args: Array[String]): Unit = {
    val sparkCon = new SparkConf().setMaster("local[*]").setAppName("rdd")

    val sparkContext = new SparkContext(sparkCon)

    val rdd = sparkContext.makeRDD(List(1, 2, 3, 4),2)

    // 有多少个分区 执行多少次
    /**
     * mapPartitions 可以以分区为单位进行数据转换操作，但会将整个分区的数据加载到内存进行引用，如果处理完的数据不会被释放，存在对象的引用，
     *                内存较小，数据较大容易造成内存溢出
     */
    val mapRdd = rdd.mapPartitions(
      iter => {
        println("@@@@@@@@@@")
        iter.map(_ * 2)
      }
    )

    mapRdd.collect()

    sparkContext.stop()
  }

}
